iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
1
自我挑戰組

30天學會用FreeBSD & Apache架網站系列 第 25

【Day25】Apache的虛擬主機設定:httpd-vhosts.conf

  • 分享至 

  • xImage
  •  

今天要來講一個新的東西:virtual host。
他的概念是在一個apache server上同時架很多台的主機,可以用IP、port、網址等等來讓apache導向不同網頁,而且瀏覽網頁的人看不出來,而我們示範會用不同的port來讓瀏覽者看到不同網頁。

extra/httpd-vhosts.conf(1)

因為它可以放很多的虛擬主機,所以我們先來看看單一個的結構:

<VirtualHost *:443>
    ServerAdmin admin@example.com
    DocumentRoot "/usr/local/www/apache24/data"
    ServerName test.cnmc.tw
    ServerAlias www.test.cnmc.tw
    ErrorLog "/var/log/test.log"
    CustomLog "/var/log.test.log" commom
</VirtualHost>

應該有看到很多是之前講過的吧,所以我們就略過囉。
要注意的是如果啟用httpd-vhosts.conf,要換網頁路徑就要到這裡而不是httpd.conf喔。
那我們來講一下之前沒說過的:
ServerAlias [www.example.com]:
他是可以讓其他網址也連到這個網站用的,當然你DNS要先設好,而且因為我們不提到網址的virtual host,所以他就會被略過。

CustomLog:
這個有點可怕,他可以用apache官網說的那一堆格式化的參數來調整你的log,他是調整內容,而ErrorLog調位置
然後他httpd.conf其實也有只是我從來沒注意到(摀臉,然後我也看不太懂他到底在寫甚麼,看到字串格式化我就怕。
總之剛剛有翻文看了一下,跟自己喜歡的整理一下,就寫在這吧:
%a
Client IP address of the request
來訪的IP

%s
Status. For requests that have been internally redirected, this is the status of the original request. Use %>s for the final status.
他會給一些狀態的資料,像是用get還是post、http狀態碼之類的。
用的ErrorLog大概會出現像這樣的東西:
"GET / HTTP/1.1" 304 -

%t
Time the request was received, in the format [18/Sep/2011:19:18:28 -0400]. The last number indicates the timezone offset from GMT
連線請求的時間,他說最後一個數字是跟格林威治時間的時差,像我們就會是+0800
好那我們快速地講過一些參數之後就可以開始架虛擬主機了!
我們會用到很多個上面那種結構,舉列來說:

<VirtualHost *:443>
    ServerAdmin admin@example.com
    DocumentRoot "/usr/local/www/apache24/data"
    ErrorLog "/var/log/test.log"
    CustomLog "/var/log.test.log" commom
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin admin@example.com
    DocumentRoot "/usr/local/www/apache24/data/test80"
    ErrorLog "/var/log/test.log"
    CustomLog "/var/log.test.log" commom
</VirtualHost>

其實大概只要打成這個樣子就可以了,443 port會連到/usr/local/www/apache24/data;而80 port會連到/usr/local/www/apache24/data/test80
但是這樣還不會生效,我們要回到httpd.conf囉!

httpd.conf

先找到大概在509行的#Include etc/apache24/extra/httpd-vhosts.conf,把它取消註解,然後就去service apache24 restart,然後去看看你的網頁:
https://ithelp.ithome.com.tw/upload/images/20191008/20120263SVKXQMUnSA.png
OAO他死掉了,這是因為你的SSL沒有弄的緣故,還記得昨天的httpd-ssl.conf裡面也有VirtualHost吧,因為現在用了httpd-vhosts.conf,所以跟改網站檔案的路徑一樣,要在這裡改。

extra/httpd-vhosts.conf(2)

所以在兩個<VirtualHost>裡面都加上:

SSLEngine On
SSLCertificateFile "/usr/local/etc/letsencrypt/live/test.cnmc.tw/fullchain.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/test.cnmc.tw/privkey.pem"

就是跟昨天在httpd-ssl.conf那邊打一樣的東西,只是昨天他已經幫你寫好第一行了。這時候又建議開一下screen,比較好做事。

今日小結

今天架了一下虛擬主機,但是其實以port來做實用性不高,畢竟不會有人知道你到底用了個port,所以通常是機密性或是私人性的比較容易用到。
而開的port也要注意一下,有時候就是開不起來(可能被占用之類的),然後你就會很問號。基本上80、443、8080等都是可以開的。
但是為了方便起見,我之後都會把virtual hosts關掉,不然容易出現奇妙的事情,畢竟我也說了,用port來弄其實一般人不會知道你到底開了什麼port,所以就是測試而已。
話說今天考完段考了欸,所以今天我文章沒有時間壓力XD
最近好好休息一下好了,段考+鐵人賽真的不是鬧著玩的...
噢而且我物理及格了,開心開心。


上一篇
【Day24】Apache的SSL設定:httpd-ssl.conf
下一篇
【Day26】Apache的小雜項
系列文
30天學會用FreeBSD & Apache架網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言